// #include <pthread.h>
// #include <unistd.h>
// #include <stdio.h>

// size_t g_val = 100;

// void *thread1_run(void* args)
// {
//     while(1)
//     {
//         //printf("我是线程1，pid: %d ,正在运行!\n", getpid());
//         sleep(1);
//         printf("我是线程1，g_val = , pid:%d\n", g_val, getpid());
//     }
// }

// void *thread2_run(void* args)
// {
//     while(1)
//     {
//         // sleep(5);
//         // printf("我是线程2，pid: %d ,正在运行!\n", getpid());
//         // char* s = "hello world";
//         // *s = 'H';
//         //字符串常量不能修改，只允许读；
//         //s指针指向的字符串是虚拟地址，在进行*s寻址操作的时候，势必会进行从虚拟地址到物理地址的转化
//         //MMU寄存器会查阅对应的页表，发现*s是只读的，不能修改内容，属于非法操作，此时MMU就会出现异常
//         //OS检测到异常后，就会发送11号信号（段错误）到当前进程，终止进程

//         //测试并发问题
//         sleep(1);
//         printf("我是线程2，g_val = , pid:%d\n", g_val++, getpid());
//     }
// }

// void *thread3_run(void* args)
// {
//     while(1)
//     {
//         printf("我是线程3， 正在运行!\n");
//         sleep(1);
//     }
// }

// int main()
// {
//     pthread_t id1, id2, id3;
//     //创建线程
//     pthread_create(&id1, NULL, thread1_run, NULL);
//     pthread_create(&id2, NULL, thread2_run, NULL);
//     //pthread_create(&id3, NULL, thread3_run, NULL);

//     while(1)
//     {
//         //printf("我是主线程,我的pid: %d \n", getpid());
//         sleep(1);
//         printf("我是主线程，g_val = , 我的pid: %d \n", g_val, getpid());
//     }

//     return 0;
// }